﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using Newtonsoft.Json;
using B2BAktarim.VeriServisi;

namespace B2BAktarim
{
    public class SyncCari
    {
        public int ID { get; set; }
        public string Kodu { get; set; }
        public string Adi { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }
    }

    public class SyncDovizKuru
    {
        public int ID { get; set; }
        public byte DovizCinsi { get; set; }
        public double Kur { get; set; }
    }

    public class SyncFiyatListesi
    {
        public int ID { get; set; }
        public string CariKodu { get; set; }
        public string StokKodu { get; set; }
        public double BrutFiyat { get; set; }
        public double Isk1Oran { get; set; }
        public double Isk2Oran { get; set; }
        public double Isk3Oran { get; set; }
        public double Isk4Oran { get; set; }
        public double Isk5Oran { get; set; }
        public double Isk6Oran { get; set; }
        public double Isk1Tutar { get; set; }
        public double Isk2Tutar { get; set; }
        public double Isk3Tutar { get; set; }
        public double Isk4Tutar { get; set; }
        public double Isk5Tutar { get; set; }
        public double Isk6Tutar { get; set; }
        public byte DovizCinsi { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }

        public double NetFiyat()
        {
            return BrutFiyat - Isk1Tutar - Isk2Tutar - Isk3Tutar - Isk4Tutar - Isk5Tutar - Isk6Tutar;
        }
    }

    public class SyncKategori
    {
        public int ID { get; set; }
        public string Kodu { get; set; }
        public string Adi { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }
    }

    public class SyncAltGrup
    {
        public int ID { get; set; }
        public string Kodu { get; set; }
        public string Adi { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }
    }

    public class SyncKullanici
    {
        public int ID { get; set; }
        public string FirmaKodu { get; set; }
        public string Email { get; set; }
        public string Sifre { get; set; }
        public bool SiparisVerebilir { get; set; }
        public bool OnayVerebilir { get; set; }
        public bool SiparisiOnayli { get; set; }
        public string Adi { get; set; }
        public string Soyadi { get; set; }
        public string Telefon { get; set; }
        public string CepTelefonu { get; set; }
        public string Adres { get; set; }
        public string Sehir { get; set; }
        public string Ilce { get; set; }
        public DateTime SonGirisTarihi { get; set; }
        public string SonGirisIPAdress { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }
    }


    public class SyncStok
    {
        public int ID { get; set; }
        public string Kodu { get; set; }
        public string Adi { get; set; }
        public byte KdvID { get; set; }
        public double KdvOrani { get; set; }
        public byte[] Resim { get; set; }
        public string KategoriKodu { get; set; }
        public double Fiyat { get; set; }
        public byte DovizCinsi { get; set; }
        public bool Degisti { get; set; }
        public bool Silindi { get; set; }
        public string AltGrupKodu { get; set; }
    }

    public class Database
    {
        List<SyncCari> _cariler = new List<SyncCari>();
        List<SyncStok> _stoklar = new List<SyncStok>();
        List<SyncDovizKuru> _kurlar = new List<SyncDovizKuru>();
        List<SyncKategori> _kategoriler = new List<SyncKategori>();
        List<SyncAltGrup> _altgruplar = new List<SyncAltGrup>();
        List<SyncKullanici> _kullanicilar = new List<SyncKullanici>();
        List<SyncFiyatListesi> _fiyatListeleri = new List<SyncFiyatListesi>();

        private static Database _instance;
        public static Database LoadDb
        {
            get
            {
                if (_instance == null)
                {
                    if (File.Exists(Application.StartupPath + "\\db.bin"))
                    {
                        _instance = JsonConvert.DeserializeObject<Database>(File.ReadAllText(Application.StartupPath + "\\db.bin"));
                    }
                    else
                    {
                        _instance = new Database();
                    }
                }
                return _instance;
            }
        }
        public void SaveDb()
        {
            string value = JsonConvert.SerializeObject(_instance);
            File.WriteAllText(Application.StartupPath + "\\db.bin", value);
        }
        public Database() { }


        public List<SyncFiyatListesi> FiyatListeleri
        {
            get { return _fiyatListeleri; }
        }
        public List<SyncKullanici> Kullanicilar
        {
            get { return _kullanicilar; }
        }
        public List<SyncKategori> Kategoriler
        {
            get { return _kategoriler; }
        }
        public List<SyncAltGrup> AltGruplar
        {
            get { return _altgruplar; }
        }
        public List<SyncDovizKuru> Kurlar
        {
            get { return _kurlar; }
        }
        public List<SyncCari> Cariler
        {
            get { return _cariler; }
        }
        public List<SyncStok> Stoklar
        {
            get { return _stoklar; }
        }
    }
}
